Servicio

Los servicios son los encargados de procesar los datos que reciben de los controladores y de acceder a los repositorios. Además se encargan de controlar los errores que se puedan llegar a producir.
@Service
public class PlayerServiceImpl implements PlayerService {
        @Autowired
        private PlayerRepository repository;

        @Override
        public List<PlayerModel> getAll() {
                List<PlayerModel> players = repository.findAll();
                if (players.isEmpty()) {
                        throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Players not found.");
                }
                return repository.findAll();
        }

        @Override
        public PlayerModel getById(long id) {
                return repository.findById(id).orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND,
                                "Id {" + id + "} not found, couldn't get the player."));
        }

        @Override
        public PlayerModel create(PlayerModel player) {
                if (repository.findByName(player.getName()).isPresent()) {
                        throw new ResponseStatusException(HttpStatus.CONFLICT,
                                        "Name {" + player.getName() + "} exists, couldn't create the player.");
                }
                if (repository.findByUuid(player.getUuid()).isPresent()) {
                        throw new ResponseStatusException(HttpStatus.CONFLICT,
                                        "Uuid {" + player.getUuid() + "} exists, couldn't create the player.");
                }
                return repository.save(player);
        }

        @Override
        public boolean delete(long id) {
                repository.findById(id).orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND,
                                "Id {" + id + "} not found, couldn't delete the player."));
                repository.deleteById(id);
                return true;
        }
}
  • @Service: Indica que es la capa lógica de negocio.
La clase ResponseStatusException permite lanzar excepciones indicando un código de estado Http, un mensaje y una causa. Esto permite crear excepciones de forma progresiva y además evita crear clases de excepciones propias.